#ifndef _SJ_IMAGE_H_
#define _SJ_IMAGE_H_
#include "zf_common_typedef.h"
#include "zf_common_headfile.h" // 包含逐飞代码需要的通用类型定义
#include <stdbool.h>  // 包含 bool 类型
//#define POINTS_MAX_LEN      (800)
#define FAR_POINTS_MAX_LEN  (300) // 为十字远线功能定义最大点数
// ================== 对外提供的核心函数 ==================

/**
 * @brief 初始化图像处理模块内部的参数和数据结构
 */
void sf_img_logic_init(void);

/**
 * @brief 图像处理主函数，执行所有算法流程
 * @param raw_image_data 指向原始摄像头图像数据的指针
 */
void sf_img_logic_process(uint8_t* raw_image_data);


// ============ 对外提供的数据获取接口 (Getters) ============

/**
 * @brief 获取经过重采样和平滑后的左边线点集
 * @param[out] left_line_ptr 指向点集数组头部的指针的指针
 * @param[out] num 点的数量
 */
void sf_get_left_line_resampled(float** left_line_ptr, int* num);

/**
 * @brief 获取经过重采样和平滑后的右边线点集
 * @param[out] right_line_ptr 指向点集数组头部的指针的指针
 * @param[out] num 点的数量
 */
void sf_get_right_line_resampled(float** right_line_ptr, int* num);

/**
 * @brief 获取最终用于控制的归一化中心线点集
 * @param[out] center_line_ptr 指向点集数组头部的指针的指针
 * @param[out] num 点的数量
 */
void sf_get_final_center_line(float** center_line_ptr, int* num);

/**
 * @brief 检查是否找到了左L角点
 * @param[out] out_id 如果找到，返回角点在边线数组中的索引。可传入NULL忽略。
 * @return true 如果找到，否则 false
 */
bool sf_is_left_L_found(int* out_id);

/**
 * @brief 检查是否找到了右L角点
 * @param[out] out_id 如果找到，返回角点在边线数组中的索引。可传入NULL忽略。
 * @return true 如果找到，否则 false
 */
bool sf_is_right_L_found(int* out_id);

/**
 * @brief 检查是否找到了左Y角点
 * @param[out] out_id 如果找到，返回角点在边线数组中的索引。可传入NULL忽略。
 * @return true 如果找到，否则 false
 */
bool sf_is_left_Y_found(int* out_id);

/**
 * @brief 检查是否找到了右Y角点
 * @param[out] out_id 如果找到，返回角点在边线数组中的索引。可传入NULL忽略。
 * @return true 如果找到，否则 false
 */
bool sf_is_right_Y_found(int* out_id);

/**
 * @brief 检查左边线是否被判断为长直道
 * @return true 如果是长直道，否则 false
 */
bool sf_is_left_straight(void);

/**
 * @brief 检查右边线是否被判断为长直道
 * @return true 如果是长直道，否则 false
 */
bool sf_is_right_straight(void);

/**
 * @brief 检测图像中是否存在斑马线
 * @return true 如果检测到，否则 false
 */
bool sf_is_zebra_found(void);

/**
 * @brief 获取左侧备选中线点集
 * @param[out] left_center_line_ptr 指向点集数组头部的指针的指针
 * @param[out] num 点的数量
 */
void sf_get_left_center_line(float** left_center_line_ptr, int* num);

/**
 * @brief 获取右侧备选中线点集
 * @param[out] right_center_line_ptr 指向点集数组头部的指针的指针
 * @param[out] num 点的数量
 */
void sf_get_right_center_line(float** right_center_line_ptr, int* num);


// --- 新增：声明调试绘图函数 ---
void sf_draw_debug_view(uint8_t* output_buffer);

// ...
bool sf_is_zebra_found(void);

// --- 新增：获取原始图像上的左边线点集 ---
void sf_get_raw_left_line(int** left_line_ptr, int* num);

// --- 新增：获取原始图像上的右边线点集 ---
void sf_get_raw_right_line(int** right_line_ptr, int* num);

// --- 声明调试绘图函数 ---
void sf_draw_debug_view(uint8_t* output_buffer);
#endif




